#include "strutil.h"

#include <algorithm>
#include <vector>

namespace renderit
{
	namespace strutil
	{
		bool str_endswith(const std::string& str, const std::string& sub)
		{
			if (str.length() >= sub.length() && str.compare(str.length() - sub.length(), sub.length(), sub.c_str()) == 0)
			{
				return true;
			}
			return false;
		}

		bool str_startswith(const std::string& str, const std::string& sub)
		{
			if (str.length() >= sub.length() && str.compare(0, sub.length(), sub.c_str()) == 0)
			{
				return true;
			}
			return false;
		}

		bool str_is_guid(const std::string& str)
		{
			if (str.length() == 36 && str[8] == '-' && str[13] == '-' && str[18] == '-' && str[23] == '-')
			{
				return true;
			}
			return false;
		}

		std::vector<std::string> split(const std::string& str, char c)
		{
			std::vector<std::string> r;
			const char * p = str.data();
			const char * q = p;
			while (*p)
			{
				if (*p == c)
				{
					if (p > q)
					{
						std::string tmp(q, p - q);

						r.push_back(std::move(strip(tmp)));
					}
					q = p + 1;
				}
				p++;
			}
			if (p > q)
			{
				std::string tmp(q, p - q);
				r.push_back(std::move(strip(tmp)));
			}
			return r;
		}

		std::string strip(const std::string& str)
		{
			const char * p = str.data();
			const char * q = str.data() + str.size() - 1;
			while (*p == ' ' && p <= q)
			{
				p++;
			}

			while (*q == ' ' && q >= p)
			{
				q--;
			}

			if (q >= p)
			{
				return std::string(p, q - p + 1);
			}
			return "";
		}
	}
}